package com.skd.ssh.dao.base;



import com.skd.ssh.web.query.BaseQuery;
import com.skd.ssh.web.query.PageResult;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

public interface BaseDao<T>{
    void save(T t);
    void update(T t);
    /**
     * 根据id删除一个持久化bean的数据
     * @param id
     * @return
     */
    void delete(Serializable id);
    /**
     * 根据id提取一个持久化bean的数据
     * @param id
     * @return
     */
    T get(Serializable id);
    /**
     * 获取表中主键的最后的一个的最大值
     * @return
     */
    public Long getMaxId();
    /**
     * @param hql 完整的hql语句. SELECT obj FROM User obj WHERE obj.name like ?
     * @param params 查询参数 new Object[]{"%username%"}
     * @param start 查询起始行
     * @param limit 查询返回最大条数
     * @return
     */
    List query(String hql, Object[] params, int start, int limit);
    List query(String hql, Object[] params);
    /**
     * @param whereClause 查询条件 ,注意不要在前面加and  正确事例：obj.name = ? and obj.password=?
     *                                                 错误事例：and obj.name = ? and obj.password=?
     * @param params 查询条件参数 new Object[]{"admin","123456"}
     * @param start 查询起始行
     * @param limit 查询返回最大条数
     * @return
     */
    List<T> queryEntity(String whereClause, Object[] params, int start, int limit);
    List<T> queryEntity(String condition, Object[] params);
    public PageResult<T> findPageResult(final BaseQuery baseQuery);

    /**
     * 根据id的数组，获得集合
     * @param ids
     * @return
     */
    public Set<T> getEntrysByIds(Serializable[] ids);

    /**
     * 通过实体的属性，来查询实体
     * @param map
     * @return
     */
    public T queryEntryByProperty(final Map<String, Object> map);
    public List<T> queryEntrysByProperty(final Map<String, Object> map);
}
